package com.zwj.interview.双指针;

/**
 * @Author: Zwj
 * @Date: 2022/9/19 18:40
 *
 * 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
 * 请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
 *
 * LC88
 * https://www.youtube.com/watch?v=KkmV7Uuosmc&list=PLqmuPXxwHf0Ncbf7nlK5cpQovzEcdXD7w&index=1
 */
public class 合并两个有序数组 {

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //从后往前扫描
        int k=m+n-1;
        int i=m-1;
        int j=n-1;
        while(i>=0 && j>=0){
          if(nums1[i]>nums2[j]){
             nums1[k--]=nums1[i--];
          }else{
              nums1[k--]=nums2[j--];
          }
        }
        //如果nums2还没有走完的时候
        while(j>=0){
            nums1[k--]=nums2[j--];
        }
    }


    public void merge2(int[] nums1, int m, int[] nums2, int n) {
       int k=m+n-1;
       int i=m-1;
       int j=n-1;
       while(i>=0 && j>=0){
           if(nums1[i]>nums2[j]){
               nums1[k--]=nums1[i--];
           }else{
               nums1[k--]=nums1[j--];
           }
       }
       while(j>=0){
         nums1[k--]=nums2[j--];
       }
    }
}